package com.newsproject.service.impl;

import com.newsproject.mapper.CodeMapper;
import com.newsproject.pojo.VerificationCode;
import com.newsproject.service.VerificationCodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.Optional;

@Slf4j
@Service
public class VerificationCodeServiceImpl implements VerificationCodeService {
    @Autowired
    private CodeMapper codeMapper;
    /*
    * 生成验证码  ，并将验证码存储到数据库中
    * 生成6位随机数字验证码
    * 验证码有效期为5分钟 expirationTime 截止时间
    * 验证码生成时间为当前时间 createTime
    * */

    /*
    * 判断验证码是否正确
    * Optional 是一个容器对象，用于包含非空值或空值。
    * isPresent() 方法用于检查容器中是否包含值。如果容器中包含值，则返回 true，否则返回 false。
    * get() 方法用于获取容器中的值。如果容器中包含值，则返回该值，否则抛出 NoSuchElementException 异常。
    *
    * */
    @Override
    public boolean verifyVerificationCode(HttpSession session, String code) {
         String getCode = (String)session.getAttribute("code");
         LocalDateTime time= (LocalDateTime)session.getAttribute("createdTime");
         /*log.info("code"+getCode);
         log.info("time"+time);
         log.info(String.valueOf(code));
         log.info(String.valueOf(getCode.equals(code)));
         log.info(String.valueOf(LocalDateTime.now().isBefore(time.plusMinutes(300))));*/
         if(LocalDateTime.now().isBefore(time.plusSeconds(300)) && getCode.equals(code)){
             log.info("验证码正确");
             return true;
         }
         log.info("验证码错误");
        return false;
    }
    /*
    * 设置可以生成的验证码的时间间隔为10秒
    * */
    @Override
    public boolean canSendVerificationCode(HttpSession session) {
        LocalDateTime createdTime = (LocalDateTime)session.getAttribute("createdTime");
        if(createdTime== null ){
            return true;
        }
        if(LocalDateTime.now().isAfter(createdTime.plusMinutes(1))){
                return true;
        }
        return false;
    }
}
